﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data;
using MySql.Data.MySqlClient;

/// <summary>
/// Descripción breve de controladorautenticacion
/// </summary>
public class controladorautenticacion
{
    MySqlDataReader datos;
    MySqlClase mysql;
    usuario user;
    int idChecador;

    public usuario User
    {
        get { return user; }
        set { user = value; }
    }

	public controladorautenticacion()
	{
        user = new usuario(); 
	}

    public Boolean autenricarusuario(string username, string pasw)
    {
        mysql = new MySqlClase();
        Boolean si = false;
        usuario usdat = new usuario();
        try
        {
            mysql.AbrirConexion(); // abrir la conexion con mysql

            if (mysql.Consultar("SELECT * FROM login l where l.username ='" + username + "' and l.pasword = '" + pasw + "';  ")) 
            {
            datos = mysql.DatosConsulta; // recuperar los datos de el  mysqldatareader de la clase de conexion
            while (datos.Read()) 
            {
                usdat.Idlogin = Convert.ToInt32(datos["idlogin"].ToString());
                usdat.Username = Convert.ToString(datos["username"].ToString());
                usdat.Correo = Convert.ToString(datos["correo"].ToString());
                usdat.Nombre = Convert.ToString(datos["nombre"]).ToString();
                usdat.Nivusu = Convert.ToInt32(datos["nivusu"].ToString());
            }
            user = usdat;
            si = true;
            }
            mysql.CerrarConexion();//cerrar la conexion con mysql liverando los datos
        }
        catch (Exception ex) 
        {
            Console.WriteLine("" + ex.Message);
        }
        return si;
    }

    public Boolean AutenticarProfesores(int idprofe, string pasword, string username, int cantidad, string grupo, int hora, int idhorario)
    {
        bool flag = false;
        mysql = new MySqlClase();
        int prfid = 0;
        string profesor;

        if (mysql.AbrirConexion())
        {
            string SQL = "SELECT idprof, profesor FROM profesores p where p.idprof =" + idprofe + " and p.usuario='" + username + "' and p.contrasenia=MD5('" + pasword + "')";

            if (mysql.Consultar(SQL))
            {
                while (mysql.DatosConsulta.Read())
                {
                    prfid = Convert.ToInt32(mysql.DatosConsulta["idprof"]);
                    profesor = "" + mysql.DatosConsulta["profesor"];
                }
                mysql.CerrarConexion();

                if (idprofe == prfid)
                {
                    if (!(simodificara(grupo, hora, prfid,hora)))
                    {
                        //AGREGAR
                        if (CantidadAlumnos(grupo, cantidad))
                        {
                            if (Insertarchecada(grupo, idprofe, cantidad,hora,idhorario))
                            {
                                flag = true;
                                mysql.CerrarConexion();
                            }
                        }

                    }
                    else
                    {
                        //MODIFICAR
                        if (CantidadAlumnos(grupo, cantidad))
                        {
                            if (Modificarchecada(grupo, prfid, cantidad)) 
                            {
                                flag = true;
                            }
                        }
                    }
                }
            }
        }
        return flag;
    }


    public Boolean CantidadAlumnos(string Grupo, int cantidad) 
    {
        string SQLcant = "SELECT alumnos FROM grupos where grupo = '"+Grupo+"'";
        int alumnos=9999;
        bool flag = false;
        if (mysql.AbrirConexion()) 
        {
            mysql.Consultar(SQLcant);
            while (mysql.DatosConsulta.Read()) 
            {
               alumnos =Convert.ToInt32(mysql.DatosConsulta["alumnos"]);
            }

            if (cantidad <= alumnos) 
            {
                flag = true;
            }
        }
        mysql.CerrarConexion();
        return flag;
    }

    public Boolean simodificara(string grupo, int hora, int profe, int horai) 
    {
        mysql = new MySqlClase();
        bool flag = false;
        if (mysql.AbrirConexion()) 
        {
            mysql.Consultar("SELECT * FROM checado c where c.fecha=CURRENT_DATE() and c.grupo='" + grupo + "'and c.hrchecado=" + hora + " and c.idProfesor=" + profe + " and hrchecado=" + horai + ";");
            if (mysql.DatosConsulta.FieldCount > 1)
            {
                while (mysql.DatosConsulta.Read()) 
                {
                    idChecador = Convert.ToInt32(mysql.DatosConsulta["idchecado"]);
                }
                if (idChecador > 0 ) 
                {
                    flag = true;
                }
            }
        }
        mysql.CerrarConexion();
        return flag;
    }

    public Boolean Insertarchecada(string grupo, int profesor, int canticad, int horra, int idhorario)
    {
        mysql = new MySqlClase();
        string INSERTSQL = "INSERT INTO checado (fecha,grupo,asistencia,hora,idProfesor,hrchecado,idhorario) values (CURRENT_DATE(),'"+grupo+"','"+canticad+"',CURRENT_TIME(),'"+profesor+"','"+horra+"','"+idhorario+"');";

            if (mysql.AbrirConexion())
            {
                mysql.EjecutarSql(INSERTSQL);
            }

        mysql.CerrarConexion();
        return true;
    }

    public Boolean Modificarchecada(string grupo, int profesor, int canticad)
    {
        bool flag = false;
        string sql = "UPDATE checado SET asistencia="+canticad+" where idchecado="+idChecador+";";

        if (mysql.AbrirConexion()) 
        {
            if (mysql.EjecutarSql(sql)) 
            {
                flag = true;
            }
        }
        mysql.CerrarConexion();
        return flag;
    }
}